package com.ee.chat.common.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ee.chat.common.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * Mapper接口
 * </p>
 *
 * @author Shane
 * @since 2019-07-09
 */
public interface UserMapper extends BaseMapper<User> {

    User selectByPhone(@Param("phone") String phone);

    /**
     * 保存手机验证码
     * @Author Shane
     * @Date 2019/7/2417:05
     * @param phone 手机号
     * @param code  验证码
     * @return
     **/
    int addPhoneCode(@Param("phone") String phone, @Param("code") String code);

    /**
     * 添加用户邀请记录
     * @Author Shane
     * @Date 2019/7/2417:59
     * @param userId    用户id
     * @param inviteUserId  邀请者id
     * @return
     **/
    int addUserInviteLog(@Param("userId") Integer userId, @Param("inviteUserId") Integer inviteUserId);

    /**
     * 获取用户消费排行
     * @Author Shane
     * @Date 2019/8/2 0:22
     * @param beginTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    List<Map<String, Object>> getUserCoinConsumeTop(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 获取主播积分排行榜
     * @Author Shane
     * @Date 2019/11/16 18:20
     * @param 
     * @return
     **/
    List<Map<String, Object>> getHostCreditTop(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime);
    
    /**
     * 获取主播通话时间排行榜
     * @Author Shane
     * @Date 2019/11/18 18:29
     * @param 
     * @return
     **/
    List<Map<String, Object>> getHostCallTimeTop(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 获取主播通话频率排行榜
     * @Author Shane
     * @Date 2019/11/18 18:30
     * @param
     * @return
     **/
    List<Map<String, Object>> getHostHWTop(@Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 获取用户基本信息
     * @Author Shane
     * @Date 2019/8/817:52
     * @param
     * @return
     **/
    Map<String, Object> getUserInfo(@Param("userId") Integer userId);

    /**
     * 获取用户朋友
     * @Author Shane
     * @Date 2019/8/912:11
     * @param userId    用户id
     * @param toUserId  需要查询的用户id
     * @param type  朋友，0-关注  1-粉丝
     * @return
     **/
    IPage<Map<String, Object>> getUserFriends(Page pgae, @Param("userId") Integer userId, @Param("toUserId") Integer toUserId, @Param("type") Integer type);

    List<Map<String, Object>> list(@Param("keyword") String keyword, @Param("status") Integer status, @Param("host") Integer host, @Param("gender") Integer gender,
                                   @Param("identity") Integer identity, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
                                   @Param("field") String field, @Param("sort") String sort, @Param("offset") Long offset, @Param("rows") Integer rows);

    Long listCount(@Param("keyword") String keyword, @Param("status") Integer status, @Param("host") Integer host, @Param("gender") Integer gender,
                   @Param("identity") Integer identity, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 推荐随机普通用户
     * @Author Shane
     * @Date 2019/10/10 22:21
     * @param userId
     * @return
     */
    List<Map<String, Object>> getRandomUsers(@Param("userId") Integer userId, @Param("keyword") String keyword, @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 获取通话用户的信息
     * @Author Shane
     * @Date 2019/11/14 21:01
     * @param userId    用户id
     * @return
     **/
    Map<String, Object> getCellUserInfo(@Param("toUserId") Integer toUserId);

    /**
     * 获取设置注册的账号
     * @Author Shane
     * @Date 2020/1/31 23:47
     * @param
     * @return
     */
    int getImeiCount(@Param("imem") String imei);

    /**
     * 获取指定状态的用户id集合
     * @Author Shane
     * @Date 2020/7/13 23:40
     * @param
     * @return
     */
    List<Integer> getOnlineUser(@Param("online") Integer online);

    /**
     * 获取指定状态的主播
     * @Author Shane
     * @Date 2020/7/13 23:42
     * @param
     * @return
     */
    List<Map<String, Object>> getOnlineHost(@Param("online") Integer online);

    /**
     * 获取用户总注册量
     * @Author AppiJ
     * @Date 2020/9/26 17:19
     * @param
     * @return
     */
    Integer getRegisterUserTotal();

    /**
     * 获取在线主播数量
     * @return
     */
    int getOnlineHostCount(@Param("online") Integer online);

    /**
     * 获取指定设备列表
     * @param imei
     * @return
     */
    List<User> selectByImei(@Param("imei") String imei);

    /**
     * 获取该设备
     * @param imei
     * @return
     */
    int selectHostByImei(@Param("imei") String imei);

    /**
     * 获取用户详细信息
     * @Author AppiJ
     * @Date 2020/12/8 14:43
     * @param
     * @return
     */
    Map<String, Object> toUserInfo(@Param("id") Integer id);

    int updateUserByLnglat(@Param("userId") Integer userId, @Param("lnglat") String lnglat);
}